
import Emitter from '../libs/tinyemitter';
import { SCREEN_WIDTH, SCREEN_HEIGHT } from '../render';
import DataBus from '../databus';

const databus = new DataBus();
const atlas = wx.createImage();
atlas.src = 'images/Common.png';

// 按钮区域常量
const BTN_WIDTH = 150;
const BTN_HEIGHT = 40;
const RESTART_BTN_X = (SCREEN_WIDTH - BTN_WIDTH) / 2;
const RESTART_BTN_Y = SCREEN_HEIGHT / 2 + 70;
const LEADERBOARD_BTN_X = (SCREEN_WIDTH - BTN_WIDTH) / 2;
const LEADERBOARD_BTN_Y = RESTART_BTN_Y + BTN_HEIGHT + 20;

export default class GameInfo extends Emitter {
  constructor() {
    super();
  }

  setFont(ctx) {
    ctx.fillStyle = '#ffffff';
    ctx.font = '20px Arial';
  }

  render(ctx) {
    this.renderGameScore(ctx, databus.score); // 绘制当前分数
    
    // 游戏结束时渲染结束界面
    if (databus.gameOver) {
      this.renderGameOver(ctx);
    }
    
    // 如果正在显示排行榜，则渲染排行榜
    if (databus.showLeaderboard) {
      this.renderLeaderboard(ctx);
    }
  }

  renderGameScore(ctx, score) {
    // 使用较小的字体
    ctx.font = '14px Arial';
    ctx.fillStyle = '#ffffff';
    ctx.textAlign = 'left';
    
    // 创建半透明背景
    ctx.fillStyle = 'rgba(0, 0, 0, 0.5)';
    ctx.fillRect(5, 5, 150, databus.allies ? (180 + databus.allies.length * 80) : 180);
    ctx.fillStyle = '#ffffff';
    
    // 绘制基本游戏信息
    const padding = 15;
    let yPos = 25;
    
    // 绘制录制状态
    if (databus.isRecording) {
      // 绘制红点和"REC"文字
      ctx.fillStyle = '#FF3B30';
      ctx.beginPath();
      ctx.arc(padding + 5, yPos - 5, 4, 0, 2 * Math.PI);
      ctx.fill();
      ctx.fillStyle = '#ffffff';
      ctx.fillText('REC', padding + 15, yPos);
      yPos += 20;
    }
    
    ctx.fillText(`得分: ${score}`, padding, yPos);
    yPos += 20;
    
    if (databus.player) {
      ctx.fillText(`等级: ${databus.player.level}`, padding, yPos);
      yPos += 20;
      
      // 绘制HP，使用进度条样式
      ctx.fillText(`生命: ${databus.player.hp}/${databus.player.maxHp}`, padding, yPos);
      yPos += 20;
      
      // 绘制分隔线
      ctx.fillRect(padding, yPos, 130, 1);
      yPos += 15;
      
      // 绘制主角狮子的捕猎统计
      const lionStats = databus.huntingStats.lion;
      ctx.fillText(`狮王捕获统计:`, padding, yPos);
      yPos += 20;
      
      // 使用表格样式布局
      ctx.fillText(`鹿: ${lionStats.goats}   野猪: ${lionStats.pigs}`, padding + 10, yPos);
      yPos += 20;
      
      // 绘制饥饿度进度条
      ctx.fillText(`饥饿度:`, padding + 10, yPos);
      yPos += 15;
      
      // 绘制进度条背景
      ctx.fillStyle = '#444444';
      ctx.fillRect(padding + 10, yPos, 100, 8);
      
      // 绘制进度条
      const hungerColor = lionStats.hunger > 60 ? '#4CD964' : (lionStats.hunger > 30 ? '#FFCC00' : '#FF3B30');
      ctx.fillStyle = hungerColor;
      ctx.fillRect(padding + 10, yPos, lionStats.hunger, 8);
      ctx.fillStyle = '#ffffff';
      yPos += 20;
      
      // 绘制分隔线
      ctx.fillRect(padding, yPos, 130, 1);
      yPos += 15;
      
      // 绘制盟友的捕猎统计
      if (databus.allies && databus.allies.length > 0) {
        databus.allies.forEach((ally, index) => {
          const allyStats = databus.huntingStats.allies[index] || { goats: 0, pigs: 0, hunger: 100 };
          
          ctx.fillText(`狮子${index + 1}捕获统计:`, padding, yPos);
          yPos += 20;
          
          ctx.fillText(`鹿: ${allyStats.goats}   野猪: ${allyStats.pigs}`, padding + 10, yPos);
          yPos += 20;
          
          // 绘制饥饿度进度条
          ctx.fillText(`饥饿度:`, padding + 10, yPos);
          yPos += 15;
          
          // 绘制进度条背景
          ctx.fillStyle = '#444444';
          ctx.fillRect(padding + 10, yPos, 100, 8);
          
          // 绘制进度条
          const allyHungerColor = allyStats.hunger > 60 ? '#4CD964' : (allyStats.hunger > 30 ? '#FFCC00' : '#FF3B30');
          ctx.fillStyle = allyHungerColor;
          ctx.fillRect(padding + 10, yPos, allyStats.hunger, 8);
          ctx.fillStyle = '#ffffff';
          yPos += 25;
        });
      }
    }
    
    // 绘制饥饿度警告
    if (databus.player && databus.huntingStats.lion.hunger < 30) {
      ctx.font = '16px Arial';
      ctx.fillStyle = '#FF3B30';
      ctx.textAlign = 'center';
      ctx.fillText('警告：饥饿度过低！', SCREEN_WIDTH / 2, 30);
      ctx.textAlign = 'left';
      ctx.fillStyle = '#ffffff';
      ctx.font = '14px Arial';
    }
  }
  
  /**
   * 渲染游戏结束界面
   */
  renderGameOver(ctx) {
    ctx.drawImage(atlas, 0, 0, 119, 108, SCREEN_WIDTH / 2 - 60, SCREEN_HEIGHT / 2 - 100, 120, 120);
    
    ctx.fillStyle = '#ffffff';
    ctx.font = '20px Arial';
    ctx.fillText(
      '游戏结束',
      SCREEN_WIDTH / 2 - 40,
      SCREEN_HEIGHT / 2 + 20
    );
    
    ctx.fillText(
      `得分: ${databus.score}`,
      SCREEN_WIDTH / 2 - 40,
      SCREEN_HEIGHT / 2 + 50
    );
    
    // 绘制重新开始按钮
    ctx.fillStyle = '#007AFF';
    ctx.fillRect(RESTART_BTN_X, RESTART_BTN_Y, BTN_WIDTH, BTN_HEIGHT);
    
    ctx.fillStyle = '#ffffff';
    ctx.font = '16px Arial';
    ctx.fillText(
      '重新开始',
      RESTART_BTN_X + 45,
      RESTART_BTN_Y + 25
    );
    
    // 绘制排行榜按钮
    ctx.fillStyle = '#4CD964';
    ctx.fillRect(LEADERBOARD_BTN_X, LEADERBOARD_BTN_Y, BTN_WIDTH, BTN_HEIGHT);
    
    ctx.fillStyle = '#ffffff';
    ctx.font = '16px Arial';
    ctx.fillText(
      '查看排行榜',
      LEADERBOARD_BTN_X + 40,
      LEADERBOARD_BTN_Y + 25
    );
  }
  
  /**
   * 渲染排行榜
   */
  renderLeaderboard(ctx) {
    // 绘制半透明背景
    ctx.fillStyle = 'rgba(0, 0, 0, 0.7)';
    ctx.fillRect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
    
    // 绘制排行榜标题
    ctx.fillStyle = '#ffffff';
    ctx.font = '24px Arial';
    ctx.fillText(
      '排行榜',
      SCREEN_WIDTH / 2 - 40,
      50
    );
    
    // 绘制排行榜数据
    if (databus.leaderboardData && databus.leaderboardData.length > 0) {
      ctx.font = '16px Arial';
      
      // 绘制表头
      ctx.fillText('排名', 30, 100);
      ctx.fillText('玩家', 100, 100);
      ctx.fillText('分数', 200, 100);
      ctx.fillText('距离', 270, 100);
      ctx.fillText('波次', 340, 100);
      
      // 绘制分割线
      ctx.strokeStyle = '#ffffff';
      ctx.beginPath();
      ctx.moveTo(20, 110);
      ctx.lineTo(SCREEN_WIDTH - 20, 110);
      ctx.stroke();
      
      // 绘制排行榜数据
      databus.leaderboardData.forEach((item, index) => {
        if (index < 10) { // 只显示前10名
          const y = 140 + index * 30;
          ctx.fillText(`${index + 1}`, 30, y);
          ctx.fillText(item.nickname || '玩家', 100, y);
          ctx.fillText(`${item.score}`, 200, y);
          ctx.fillText(`${item.distance}m`, 270, y);
          ctx.fillText(`${item.waves}`, 340, y);
        }
      });
    } else {
      ctx.fillText('暂无数据', SCREEN_WIDTH / 2 - 40, 150);
    }
    
    // 绘制返回按钮
    ctx.fillStyle = '#FF3B30';
    ctx.fillRect(SCREEN_WIDTH / 2 - 75, SCREEN_HEIGHT - 70, 150, 40);
    
    ctx.fillStyle = '#ffffff';
    ctx.font = '16px Arial';
    ctx.fillText(
      '返回',
      SCREEN_WIDTH / 2 - 20,
      SCREEN_HEIGHT - 45
    );
  }
}